﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;

namespace WebRaoVat
{
    public class XL_XML
    {
        // Đọc tài liệu
        public static XmlDocument ReadDocumentFile(string filename)
        {
            XmlDocument TaiLieu = new XmlDocument();
            TaiLieu.Load(filename);
            return TaiLieu;
        }

        public static XmlDocument ReadDocumentText(string xmlString)
        {
            XmlDocument TaiLieu = new XmlDocument();
            TaiLieu.LoadXml(xmlString);
            return TaiLieu;
        }

        // Lấy Node gốc
        public static XmlElement ReadRootNode(XmlDocument TaiLieu)
        {
            XmlElement RootNode = TaiLieu.DocumentElement;
            return RootNode;
        }

        // Đọc danh sách Node với XPath
        public static XmlNodeList ReadNodeList(XmlDocument TaiLieu, string strXPath)
        {
            XmlNodeList NodeList = TaiLieu.SelectNodes(strXPath);
            return NodeList;
        }

        // Đọc danh sách Node với XPath, và Innertext
        public static XmlNodeList ReadNodeList(string innerText, string strXPath)
        {
            XmlNodeList NodeList = null;
            return NodeList;
        }


        // Lấy Node chính xác theo đường dẫn
        public static XmlNode ReadNodeSingle(XmlDocument TaiLieu, string strXPath)
        {
            XmlNode Node = TaiLieu.SelectSingleNode(strXPath);
            return Node;
        }

        // TaiLieu+XPath cho biết chính xác Node cần xóa
        public static bool DeleteNode(XmlDocument TaiLieu, string strXPath)
        {
            XmlNode DeleteNode = ReadNodeSingle(TaiLieu, strXPath);

            if (DeleteNode == null)
                return false;

            XmlNode FatherNode = DeleteNode.ParentNode;

            if (FatherNode == null)
                return false;

            FatherNode.RemoveChild(DeleteNode);
            return true;
        }

        // Create Node
        public static XmlNode CreateNode(XmlDocument tai_lieu, string node_name, List<string> ten_thuoc_tinh, List<string> gia_tri)
        {
            XmlNode NodeResult = tai_lieu.CreateElement(node_name);

            for (int i = 0; i < ten_thuoc_tinh.Count; i++)
            {
                XmlAttribute AttrName = tai_lieu.CreateAttribute(ten_thuoc_tinh[i]);
                AttrName.Value = gia_tri[i];

                NodeResult.Attributes.Append(AttrName);
            }
            return NodeResult;
        }

        // Thêm Node vào làm con của TaiLieu, XPath
        public static bool AddNode(XmlDocument TaiLieu, string strXPath, XmlNode Node)
        {
            XmlNode FatherNode = ReadNodeSingle(TaiLieu, strXPath);
            if (FatherNode == null)
                return false;
            FatherNode.AppendChild(Node);
            return true;
        }

        // Save xml file
        public static void WriteDocument(XmlDocument TaiLieu, string filename)
        {
            TaiLieu.Save(filename);
        }
    }
}

